package persistencia;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import negocio.Alumno;
import negocio.Analitico;
import negocio.Cursada;

public class AnaliticoDAO {

	private Connection c;
	private static AnaliticoDAO instancia;
	
	private AnaliticoDAO()
	{
		c = BDManager.getInstance().getConexion();
	}
	
	public static AnaliticoDAO  getInstance()
	{
		if(instancia == null)
			instancia = new AnaliticoDAO();
		return instancia;
	}	
	

	public ArrayList<Analitico> getAnalitico(Alumno alumno)
	{
		//TODO: posible no refresh, al declar aqui las variables fuera del while
		double condicion;
		Date date;
		SimpleDateFormat format;
		String semestre;

		
		String query = String.format(
			      "select alumno.nombre, alumno.apellido, alumno.dni, curso.nombre, rinde.notaexamen, cursada.fechainicio from alumno, rinde, examen, cursada, curso where alumno.dni='%s' and alumno.dni=rinde.alumno_fk and rinde.examen_fk=examen.id and examen.cursada_fk=cursada.comision and cursada.curso_fk=curso.id and examen.nombre='Nota final' and cursada.estadocursada<>'cancelada';",
			      alumno.getDni()
			    );

		ArrayList<Analitico> res = new ArrayList<Analitico>();
		try {
			Statement s = c.createStatement();
			ResultSet rs = s.executeQuery(query);
			while(rs.next())
			{
				condicion=rs.getDouble("notaexamen");
				
				//Date To String
				date=rs.getDate("fechainicio");
				date.setMonth(date.getMonth()-1);
				date.setYear(date.getYear()-1900);
				
				format=new SimpleDateFormat("MM/yyyy");
				semestre=format.format(date);
				
				
				if(condicion>3.99){                                                                          //(4)nombre curso 
				res.add(  new Analitico( rs.getString("apellido")+" "+rs.getString("nombre"), rs.getString("dni"), rs.getString(4), rs.getDouble("notaexamen"), "Aprobado", semestre) );
				}
				else{																							 //(4)nombre curso 
					res.add(  new Analitico( rs.getString("apellido")+" "+rs.getString("nombre"), rs.getString("dni"), rs.getString(4), rs.getDouble("notaexamen"), "Desaprobado", semestre ) );
				}
			
			}
			s.close();
		} 
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return res;
	}
	
	
	
	
}
